{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3.4 CartPoleをQ学習で制御"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# パッケージのimport\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import gym\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 動画の描画関数の宣言\n",
    "# 参考URL http://nbviewer.jupyter.org/github/patrickmineault\n",
    "# /xcorr-notebooks/blob/master/Render%20OpenAI%20gym%20as%20GIF.ipynb\n",
    "from JSAnimation.IPython_display import display_animation\n",
    "from matplotlib import animation\n",
    "from IPython.display import display\n",
    "from IPython.display import HTML\n",
    "\n",
    "\n",
    "def display_frames_as_gif(frames):\n",
    "    \"\"\"\n",
    "    Displays a list of frames as a gif, with controls\n",
    "    \"\"\"\n",
    "    plt.figure(figsize=(frames[0].shape[1]/72.0, frames[0].shape[0]/72.0),\n",
    "               dpi=72)\n",
    "    patch = plt.imshow(frames[0])\n",
    "    plt.axis('off')\n",
    "\n",
    "    def animate(i):\n",
    "        patch.set_data(frames[i])\n",
    "\n",
    "    anim = animation.FuncAnimation(plt.gcf(), animate, frames=len(frames),\n",
    "                                   interval=50)\n",
    "\n",
    "    anim.save('movie_cartpole.mp4')  # 動画のファイル名と保存です\n",
    "#     display(display_animation(anim, default_mode='loop'))\n",
    "    HTML(anim.to_jshtml())\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 定数の設定\n",
    "ENV = 'CartPole-v1'  # 使用する課題名\n",
    "NUM_DIZITIZED = 6  # 各状態の離散値への分割数\n",
    "GAMMA = 0.7  # 時間割引率\n",
    "ETA = 0.25  # 学習係数\n",
    "MAX_STEPS = 200  # 1試行のstep数\n",
    "NUM_EPISODES = 1000  # 最大試行回数\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Agent:\n",
    "    '''CartPoleのエージェントクラスです、棒付き台車そのものになります'''\n",
    "\n",
    "    def __init__(self, num_states, num_actions):\n",
    "        self.brain = Brain(num_states, num_actions)  # エージェントが行動を決定するための頭脳を生成\n",
    "\n",
    "    def update_Q_function(self, observation, action, reward, observation_next):\n",
    "        '''Q関数の更新'''\n",
    "        self.brain.update_Q_table(\n",
    "            observation, action, reward, observation_next)\n",
    "\n",
    "    def get_action(self, observation, step):\n",
    "        '''行動の決定'''\n",
    "        action = self.brain.decide_action(observation, step)\n",
    "        return action\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Brain:\n",
    "    '''エージェントが持つ脳となるクラスです、Q学習を実行します'''\n",
    "\n",
    "    def __init__(self, num_states, num_actions):\n",
    "        self.num_actions = num_actions  # CartPoleの行動（右に左に押す）の2を取得\n",
    "\n",
    "        # Qテーブルを作成。行数は状態を分割数^（4変数）にデジタル変換した値、列数は行動数を示す\n",
    "        self.q_table = np.random.uniform(low=0, high=1, size=(\n",
    "            NUM_DIZITIZED**num_states, num_actions))\n",
    "\n",
    "    def bins(self, clip_min, clip_max, num):\n",
    "        '''観測した状態（連続値）を離散値にデジタル変換する閾値を求める'''\n",
    "        return np.linspace(clip_min, clip_max, num + 1)[1:-1]\n",
    "\n",
    "    def digitize_state(self, observation):\n",
    "        '''観測したobservation状態を、離散値に変換する'''\n",
    "        cart_pos, cart_v, pole_angle, pole_v = observation\n",
    "        digitized = [\n",
    "            np.digitize(cart_pos, bins=self.bins(-2.4, 2.4, NUM_DIZITIZED)),\n",
    "            np.digitize(cart_v, bins=self.bins(-3.0, 3.0, NUM_DIZITIZED)),\n",
    "            np.digitize(pole_angle, bins=self.bins(-0.5, 0.5, NUM_DIZITIZED)),\n",
    "            np.digitize(pole_v, bins=self.bins(-2.0, 2.0, NUM_DIZITIZED))\n",
    "        ]\n",
    "        return sum([x * (NUM_DIZITIZED**i) for i, x in enumerate(digitized)])\n",
    "\n",
    "    def update_Q_table(self, observation, action, reward, observation_next):\n",
    "        '''QテーブルをQ学習により更新'''\n",
    "        state = self.digitize_state(observation)  # 状態を離散化\n",
    "        state_next = self.digitize_state(observation_next)  # 次の状態を離散化\n",
    "        Max_Q_next = max(self.q_table[state_next][:])\n",
    "        q_table_new = self.q_table[state, action] + \\\n",
    "            ETA * (reward + GAMMA * Max_Q_next - self.q_table[state, action])\n",
    "#         print(self.q_table[state, action] - q_table_new)\n",
    "        self.q_table[state, action] = q_table_new\n",
    "        \n",
    "\n",
    "    def decide_action(self, observation, episode):\n",
    "        '''ε-greedy法で徐々に最適行動のみを採用する'''\n",
    "        state = self.digitize_state(observation)\n",
    "        epsilon = 0.5 * (1 / (episode + 1))\n",
    "\n",
    "        if epsilon <= np.random.uniform(0, 1):\n",
    "            action = np.argmax(self.q_table[state][:])\n",
    "        else:\n",
    "            action = np.random.choice(self.num_actions)  # 0,1の行動をランダムに返す\n",
    "        return action\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Environment:\n",
    "    '''CartPoleを実行する環境のクラスです'''\n",
    "\n",
    "    def __init__(self):\n",
    "        self.env = gym.make(ENV,render_mode='rgb_array')  # 実行する課題を設定\n",
    "        num_states = self.env.observation_space.shape[0]  # 課題の状態の数4を取得\n",
    "        num_actions = self.env.action_space.n  # CartPoleの行動（右に左に押す）の2を取得\n",
    "        self.agent = Agent(num_states, num_actions)  # 環境内で行動するAgentを生成\n",
    "\n",
    "    def run(self):\n",
    "        '''実行'''\n",
    "        complete_episodes = 0  # 195step以上連続で立ち続けた試行数\n",
    "        is_episode_final = False  # 最終試行フラグ\n",
    "        frames = []  # 動画用に画像を格納する変数\n",
    "        u = []\n",
    "        diff_q = []\n",
    "\n",
    "        for episode in range(NUM_EPISODES):  # 試行数分繰り返す\n",
    "            observation = self.env.reset()[0]  # 環境の初期化\n",
    "            q = self.agent.brain.q_table.copy()\n",
    "            for step in range(MAX_STEPS):  # 1エピソードのループ\n",
    "#                 print(\"episode:\",episode,\", step:\", step)\n",
    "                if is_episode_final is True:  # 最終試行ではframesに各時刻の画像を追加していく\n",
    "#                     frames.append(self.env.render(mode='rgb_array'))\n",
    "                    frames.append(self.env.render())\n",
    "\n",
    "                # 行動を求める\n",
    "                action = self.agent.get_action(observation, episode)\n",
    "            \n",
    "                if is_episode_final is True: \n",
    "                    u.append(action)\n",
    "\n",
    "                # 行動a_tの実行により、s_{t+1}, r_{t+1}を求める\n",
    "#                 observation_next, _, done, _ = self.env.step(\n",
    "#                     action)  # rewardとinfoは使わないので_にする\n",
    "                observation_next, _, done, _, _ = self.env.step(action)  # rewardとinfoは使わないので_にする\n",
    "                # 報酬を与える\n",
    "                if done:  # ステップ数が200経過するか、一定角度以上傾くとdoneはtrueになる\n",
    "                    if step < 120:\n",
    "                        reward = -1  # 途中でこけたら罰則として報酬-1を与える\n",
    "                        complete_episodes = 0  # 195step以上連続で立ち続けた試行数をリセット\n",
    "                    else:\n",
    "                        reward = 1  # 立ったまま終了時は報酬1を与える\n",
    "                        complete_episodes += 1  # 連続記録を更新\n",
    "                else:\n",
    "                    reward = 0  # 途中の報酬は0\n",
    "\n",
    "                # step+1の状態observation_nextを用いて,Q関数を更新する\n",
    "#                 print(\"observation:\",observation)\n",
    "#                 print(\"observation_next:\",observation_next)\n",
    "                \n",
    "                self.agent.update_Q_function(\n",
    "                    observation, action, reward, observation_next)\n",
    "\n",
    "                # 観測の更新\n",
    "                observation = observation_next\n",
    "\n",
    "                # 終了時の処理\n",
    "                if done:\n",
    "                    print('{0} Episode: Finished after {1} time steps'.format(\n",
    "                        episode, step + 1))\n",
    "#                     print(self.q_table[state, action] - q_table_new)\n",
    "                    break\n",
    "\n",
    "            if is_episode_final is True:  # 最終試行では動画を保存と描画\n",
    "                display_frames_as_gif(frames)\n",
    "                break\n",
    "\n",
    "            if complete_episodes >= 10:  # 10連続成功なら\n",
    "                print('10回连续成功')\n",
    "                is_episode_final = True  # 次の試行を描画を行う最終試行とする\n",
    "\n",
    "            diff_q.append(np.sum(self.agent.brain.q_table - q))\n",
    "        \n",
    "        fig = plt.figure(figsize=(5, 5))\n",
    "        ax = plt.gca()\n",
    "        plt.plot(u, color='red', linewidth=2)\n",
    "        \n",
    "        fig2 = plt.figure(figsize=(5, 5))\n",
    "        ax2 = plt.gca()\n",
    "        plt.plot(diff_q, color='red', linewidth=2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "q_table: [[0.04564364 0.36788154]\n",
      " [0.65959932 0.66801484]\n",
      " [0.21812583 0.25026369]\n",
      " ...\n",
      " [0.49916932 0.47229849]\n",
      " [0.46639302 0.44615276]\n",
      " [0.38903585 0.79415517]]\n",
      "0 Episode: Finished after 19 time steps\n",
      "1 Episode: Finished after 25 time steps\n",
      "2 Episode: Finished after 20 time steps\n",
      "3 Episode: Finished after 23 time steps\n",
      "4 Episode: Finished after 28 time steps\n",
      "5 Episode: Finished after 54 time steps\n",
      "6 Episode: Finished after 13 time steps\n",
      "7 Episode: Finished after 19 time steps\n",
      "8 Episode: Finished after 11 time steps\n",
      "9 Episode: Finished after 13 time steps\n",
      "10 Episode: Finished after 21 time steps\n",
      "11 Episode: Finished after 20 time steps\n",
      "12 Episode: Finished after 45 time steps\n",
      "13 Episode: Finished after 26 time steps\n",
      "14 Episode: Finished after 18 time steps\n",
      "15 Episode: Finished after 25 time steps\n",
      "16 Episode: Finished after 13 time steps\n",
      "17 Episode: Finished after 11 time steps\n",
      "18 Episode: Finished after 13 time steps\n",
      "19 Episode: Finished after 12 time steps\n",
      "20 Episode: Finished after 47 time steps\n",
      "21 Episode: Finished after 46 time steps\n",
      "22 Episode: Finished after 18 time steps\n",
      "23 Episode: Finished after 27 time steps\n",
      "24 Episode: Finished after 26 time steps\n",
      "25 Episode: Finished after 10 time steps\n",
      "26 Episode: Finished after 12 time steps\n",
      "27 Episode: Finished after 10 time steps\n",
      "28 Episode: Finished after 12 time steps\n",
      "29 Episode: Finished after 17 time steps\n",
      "30 Episode: Finished after 14 time steps\n",
      "31 Episode: Finished after 27 time steps\n",
      "32 Episode: Finished after 36 time steps\n",
      "33 Episode: Finished after 35 time steps\n",
      "34 Episode: Finished after 17 time steps\n",
      "35 Episode: Finished after 11 time steps\n",
      "36 Episode: Finished after 10 time steps\n",
      "37 Episode: Finished after 20 time steps\n",
      "38 Episode: Finished after 20 time steps\n",
      "39 Episode: Finished after 20 time steps\n",
      "40 Episode: Finished after 10 time steps\n",
      "41 Episode: Finished after 13 time steps\n",
      "42 Episode: Finished after 10 time steps\n",
      "43 Episode: Finished after 9 time steps\n",
      "44 Episode: Finished after 12 time steps\n",
      "45 Episode: Finished after 23 time steps\n",
      "46 Episode: Finished after 20 time steps\n",
      "47 Episode: Finished after 32 time steps\n",
      "48 Episode: Finished after 13 time steps\n",
      "49 Episode: Finished after 36 time steps\n",
      "50 Episode: Finished after 33 time steps\n",
      "51 Episode: Finished after 146 time steps\n",
      "52 Episode: Finished after 40 time steps\n",
      "53 Episode: Finished after 77 time steps\n",
      "54 Episode: Finished after 24 time steps\n",
      "55 Episode: Finished after 31 time steps\n",
      "56 Episode: Finished after 25 time steps\n",
      "57 Episode: Finished after 70 time steps\n",
      "58 Episode: Finished after 63 time steps\n",
      "59 Episode: Finished after 28 time steps\n",
      "60 Episode: Finished after 35 time steps\n",
      "61 Episode: Finished after 53 time steps\n",
      "62 Episode: Finished after 26 time steps\n",
      "63 Episode: Finished after 50 time steps\n",
      "64 Episode: Finished after 22 time steps\n",
      "65 Episode: Finished after 34 time steps\n",
      "66 Episode: Finished after 56 time steps\n",
      "67 Episode: Finished after 89 time steps\n",
      "68 Episode: Finished after 30 time steps\n",
      "69 Episode: Finished after 11 time steps\n",
      "70 Episode: Finished after 19 time steps\n",
      "71 Episode: Finished after 28 time steps\n",
      "72 Episode: Finished after 37 time steps\n",
      "73 Episode: Finished after 99 time steps\n",
      "74 Episode: Finished after 25 time steps\n",
      "75 Episode: Finished after 45 time steps\n",
      "76 Episode: Finished after 76 time steps\n",
      "77 Episode: Finished after 37 time steps\n",
      "78 Episode: Finished after 31 time steps\n",
      "79 Episode: Finished after 20 time steps\n",
      "80 Episode: Finished after 69 time steps\n",
      "81 Episode: Finished after 94 time steps\n",
      "82 Episode: Finished after 48 time steps\n",
      "83 Episode: Finished after 37 time steps\n",
      "84 Episode: Finished after 36 time steps\n",
      "85 Episode: Finished after 12 time steps\n",
      "86 Episode: Finished after 31 time steps\n",
      "87 Episode: Finished after 43 time steps\n",
      "88 Episode: Finished after 43 time steps\n",
      "89 Episode: Finished after 16 time steps\n",
      "90 Episode: Finished after 36 time steps\n",
      "91 Episode: Finished after 47 time steps\n",
      "92 Episode: Finished after 17 time steps\n",
      "93 Episode: Finished after 38 time steps\n",
      "94 Episode: Finished after 30 time steps\n",
      "95 Episode: Finished after 26 time steps\n",
      "96 Episode: Finished after 60 time steps\n",
      "97 Episode: Finished after 22 time steps\n",
      "98 Episode: Finished after 19 time steps\n",
      "99 Episode: Finished after 80 time steps\n",
      "100 Episode: Finished after 25 time steps\n",
      "101 Episode: Finished after 35 time steps\n",
      "102 Episode: Finished after 26 time steps\n",
      "103 Episode: Finished after 93 time steps\n",
      "104 Episode: Finished after 67 time steps\n",
      "105 Episode: Finished after 83 time steps\n",
      "106 Episode: Finished after 11 time steps\n",
      "107 Episode: Finished after 54 time steps\n",
      "108 Episode: Finished after 55 time steps\n",
      "109 Episode: Finished after 41 time steps\n",
      "110 Episode: Finished after 37 time steps\n",
      "111 Episode: Finished after 38 time steps\n",
      "112 Episode: Finished after 47 time steps\n",
      "113 Episode: Finished after 54 time steps\n",
      "114 Episode: Finished after 24 time steps\n",
      "115 Episode: Finished after 52 time steps\n",
      "116 Episode: Finished after 80 time steps\n",
      "117 Episode: Finished after 21 time steps\n",
      "118 Episode: Finished after 12 time steps\n",
      "119 Episode: Finished after 54 time steps\n",
      "120 Episode: Finished after 71 time steps\n",
      "121 Episode: Finished after 34 time steps\n",
      "122 Episode: Finished after 46 time steps\n",
      "123 Episode: Finished after 39 time steps\n",
      "124 Episode: Finished after 41 time steps\n",
      "125 Episode: Finished after 12 time steps\n",
      "126 Episode: Finished after 28 time steps\n",
      "127 Episode: Finished after 48 time steps\n",
      "128 Episode: Finished after 19 time steps\n",
      "129 Episode: Finished after 71 time steps\n",
      "130 Episode: Finished after 43 time steps\n",
      "131 Episode: Finished after 25 time steps\n",
      "132 Episode: Finished after 123 time steps\n",
      "133 Episode: Finished after 113 time steps\n",
      "134 Episode: Finished after 111 time steps\n",
      "135 Episode: Finished after 99 time steps\n",
      "136 Episode: Finished after 75 time steps\n",
      "137 Episode: Finished after 133 time steps\n",
      "138 Episode: Finished after 75 time steps\n",
      "139 Episode: Finished after 71 time steps\n",
      "140 Episode: Finished after 58 time steps\n",
      "141 Episode: Finished after 36 time steps\n",
      "142 Episode: Finished after 27 time steps\n",
      "143 Episode: Finished after 55 time steps\n",
      "144 Episode: Finished after 20 time steps\n",
      "145 Episode: Finished after 27 time steps\n",
      "146 Episode: Finished after 161 time steps\n",
      "148 Episode: Finished after 133 time steps\n",
      "149 Episode: Finished after 92 time steps\n",
      "151 Episode: Finished after 50 time steps\n",
      "152 Episode: Finished after 99 time steps\n",
      "153 Episode: Finished after 72 time steps\n",
      "154 Episode: Finished after 186 time steps\n",
      "155 Episode: Finished after 39 time steps\n",
      "156 Episode: Finished after 42 time steps\n",
      "157 Episode: Finished after 36 time steps\n",
      "158 Episode: Finished after 108 time steps\n",
      "160 Episode: Finished after 48 time steps\n",
      "161 Episode: Finished after 33 time steps\n",
      "162 Episode: Finished after 140 time steps\n",
      "163 Episode: Finished after 190 time steps\n",
      "165 Episode: Finished after 73 time steps\n",
      "166 Episode: Finished after 113 time steps\n",
      "167 Episode: Finished after 64 time steps\n",
      "168 Episode: Finished after 91 time steps\n",
      "169 Episode: Finished after 127 time steps\n",
      "170 Episode: Finished after 137 time steps\n",
      "172 Episode: Finished after 97 time steps\n",
      "173 Episode: Finished after 124 time steps\n",
      "174 Episode: Finished after 200 time steps\n",
      "175 Episode: Finished after 109 time steps\n",
      "176 Episode: Finished after 114 time steps\n",
      "177 Episode: Finished after 113 time steps\n",
      "178 Episode: Finished after 62 time steps\n",
      "179 Episode: Finished after 39 time steps\n",
      "180 Episode: Finished after 38 time steps\n",
      "181 Episode: Finished after 108 time steps\n",
      "182 Episode: Finished after 89 time steps\n",
      "183 Episode: Finished after 73 time steps\n",
      "184 Episode: Finished after 113 time steps\n",
      "185 Episode: Finished after 44 time steps\n",
      "186 Episode: Finished after 163 time steps\n",
      "187 Episode: Finished after 117 time steps\n",
      "188 Episode: Finished after 148 time steps\n",
      "189 Episode: Finished after 118 time steps\n",
      "190 Episode: Finished after 161 time steps\n",
      "191 Episode: Finished after 90 time steps\n",
      "192 Episode: Finished after 54 time steps\n",
      "193 Episode: Finished after 142 time steps\n",
      "194 Episode: Finished after 60 time steps\n",
      "195 Episode: Finished after 142 time steps\n",
      "196 Episode: Finished after 131 time steps\n",
      "197 Episode: Finished after 141 time steps\n",
      "198 Episode: Finished after 121 time steps\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "199 Episode: Finished after 125 time steps\n",
      "200 Episode: Finished after 193 time steps\n",
      "201 Episode: Finished after 106 time steps\n",
      "202 Episode: Finished after 171 time steps\n",
      "203 Episode: Finished after 143 time steps\n",
      "204 Episode: Finished after 165 time steps\n",
      "205 Episode: Finished after 137 time steps\n",
      "206 Episode: Finished after 166 time steps\n",
      "207 Episode: Finished after 125 time steps\n",
      "208 Episode: Finished after 138 time steps\n",
      "209 Episode: Finished after 141 time steps\n",
      "210 Episode: Finished after 125 time steps\n",
      "211 Episode: Finished after 92 time steps\n",
      "212 Episode: Finished after 161 time steps\n",
      "213 Episode: Finished after 164 time steps\n",
      "214 Episode: Finished after 121 time steps\n",
      "216 Episode: Finished after 139 time steps\n",
      "217 Episode: Finished after 128 time steps\n",
      "218 Episode: Finished after 167 time steps\n",
      "219 Episode: Finished after 133 time steps\n",
      "220 Episode: Finished after 111 time steps\n",
      "221 Episode: Finished after 141 time steps\n",
      "222 Episode: Finished after 131 time steps\n",
      "223 Episode: Finished after 119 time steps\n",
      "224 Episode: Finished after 105 time steps\n",
      "225 Episode: Finished after 123 time steps\n",
      "226 Episode: Finished after 164 time steps\n",
      "227 Episode: Finished after 97 time steps\n",
      "228 Episode: Finished after 19 time steps\n",
      "229 Episode: Finished after 65 time steps\n",
      "230 Episode: Finished after 116 time steps\n",
      "231 Episode: Finished after 55 time steps\n",
      "232 Episode: Finished after 23 time steps\n",
      "233 Episode: Finished after 49 time steps\n",
      "234 Episode: Finished after 49 time steps\n",
      "235 Episode: Finished after 57 time steps\n",
      "236 Episode: Finished after 12 time steps\n",
      "237 Episode: Finished after 84 time steps\n",
      "238 Episode: Finished after 46 time steps\n",
      "239 Episode: Finished after 155 time steps\n",
      "241 Episode: Finished after 193 time steps\n",
      "242 Episode: Finished after 97 time steps\n",
      "243 Episode: Finished after 115 time steps\n",
      "244 Episode: Finished after 194 time steps\n",
      "247 Episode: Finished after 142 time steps\n",
      "248 Episode: Finished after 132 time steps\n",
      "249 Episode: Finished after 171 time steps\n",
      "252 Episode: Finished after 111 time steps\n",
      "253 Episode: Finished after 165 time steps\n",
      "255 Episode: Finished after 191 time steps\n",
      "256 Episode: Finished after 91 time steps\n",
      "257 Episode: Finished after 86 time steps\n",
      "258 Episode: Finished after 113 time steps\n",
      "259 Episode: Finished after 131 time steps\n",
      "262 Episode: Finished after 139 time steps\n",
      "263 Episode: Finished after 128 time steps\n",
      "264 Episode: Finished after 79 time steps\n",
      "266 Episode: Finished after 90 time steps\n",
      "267 Episode: Finished after 142 time steps\n",
      "268 Episode: Finished after 144 time steps\n",
      "269 Episode: Finished after 195 time steps\n",
      "270 Episode: Finished after 105 time steps\n",
      "271 Episode: Finished after 200 time steps\n",
      "272 Episode: Finished after 109 time steps\n",
      "273 Episode: Finished after 121 time steps\n",
      "274 Episode: Finished after 111 time steps\n",
      "275 Episode: Finished after 91 time steps\n",
      "276 Episode: Finished after 154 time steps\n",
      "277 Episode: Finished after 122 time steps\n",
      "278 Episode: Finished after 117 time steps\n",
      "279 Episode: Finished after 101 time steps\n",
      "280 Episode: Finished after 198 time steps\n",
      "281 Episode: Finished after 72 time steps\n",
      "282 Episode: Finished after 192 time steps\n",
      "283 Episode: Finished after 112 time steps\n",
      "284 Episode: Finished after 130 time steps\n",
      "285 Episode: Finished after 93 time steps\n",
      "286 Episode: Finished after 96 time steps\n",
      "287 Episode: Finished after 74 time steps\n",
      "288 Episode: Finished after 150 time steps\n",
      "289 Episode: Finished after 140 time steps\n",
      "293 Episode: Finished after 111 time steps\n",
      "294 Episode: Finished after 168 time steps\n",
      "295 Episode: Finished after 196 time steps\n",
      "299 Episode: Finished after 185 time steps\n",
      "302 Episode: Finished after 151 time steps\n",
      "303 Episode: Finished after 124 time steps\n",
      "304 Episode: Finished after 89 time steps\n",
      "305 Episode: Finished after 185 time steps\n",
      "306 Episode: Finished after 178 time steps\n",
      "307 Episode: Finished after 80 time steps\n",
      "308 Episode: Finished after 117 time steps\n",
      "309 Episode: Finished after 116 time steps\n",
      "310 Episode: Finished after 184 time steps\n",
      "311 Episode: Finished after 196 time steps\n",
      "312 Episode: Finished after 144 time steps\n",
      "313 Episode: Finished after 113 time steps\n",
      "314 Episode: Finished after 159 time steps\n",
      "315 Episode: Finished after 103 time steps\n",
      "316 Episode: Finished after 117 time steps\n",
      "317 Episode: Finished after 94 time steps\n",
      "318 Episode: Finished after 155 time steps\n",
      "319 Episode: Finished after 121 time steps\n",
      "320 Episode: Finished after 133 time steps\n",
      "321 Episode: Finished after 183 time steps\n",
      "322 Episode: Finished after 98 time steps\n",
      "323 Episode: Finished after 163 time steps\n",
      "324 Episode: Finished after 148 time steps\n",
      "325 Episode: Finished after 121 time steps\n",
      "326 Episode: Finished after 187 time steps\n",
      "327 Episode: Finished after 151 time steps\n",
      "328 Episode: Finished after 83 time steps\n",
      "331 Episode: Finished after 169 time steps\n",
      "332 Episode: Finished after 196 time steps\n",
      "335 Episode: Finished after 98 time steps\n",
      "336 Episode: Finished after 181 time steps\n",
      "337 Episode: Finished after 106 time steps\n",
      "338 Episode: Finished after 174 time steps\n",
      "339 Episode: Finished after 174 time steps\n",
      "340 Episode: Finished after 127 time steps\n",
      "341 Episode: Finished after 182 time steps\n",
      "342 Episode: Finished after 170 time steps\n",
      "343 Episode: Finished after 107 time steps\n",
      "345 Episode: Finished after 121 time steps\n",
      "347 Episode: Finished after 190 time steps\n",
      "348 Episode: Finished after 140 time steps\n",
      "349 Episode: Finished after 105 time steps\n",
      "350 Episode: Finished after 121 time steps\n",
      "352 Episode: Finished after 173 time steps\n",
      "354 Episode: Finished after 128 time steps\n",
      "356 Episode: Finished after 186 time steps\n",
      "357 Episode: Finished after 188 time steps\n",
      "358 Episode: Finished after 100 time steps\n",
      "360 Episode: Finished after 192 time steps\n",
      "361 Episode: Finished after 179 time steps\n",
      "362 Episode: Finished after 86 time steps\n",
      "363 Episode: Finished after 162 time steps\n",
      "364 Episode: Finished after 132 time steps\n",
      "367 Episode: Finished after 67 time steps\n",
      "369 Episode: Finished after 122 time steps\n",
      "370 Episode: Finished after 158 time steps\n",
      "373 Episode: Finished after 157 time steps\n",
      "374 Episode: Finished after 78 time steps\n",
      "375 Episode: Finished after 117 time steps\n",
      "376 Episode: Finished after 119 time steps\n",
      "378 Episode: Finished after 110 time steps\n",
      "379 Episode: Finished after 173 time steps\n",
      "380 Episode: Finished after 117 time steps\n",
      "381 Episode: Finished after 69 time steps\n",
      "382 Episode: Finished after 89 time steps\n",
      "383 Episode: Finished after 81 time steps\n",
      "385 Episode: Finished after 101 time steps\n",
      "386 Episode: Finished after 194 time steps\n",
      "387 Episode: Finished after 88 time steps\n",
      "388 Episode: Finished after 102 time steps\n",
      "389 Episode: Finished after 95 time steps\n",
      "390 Episode: Finished after 123 time steps\n",
      "391 Episode: Finished after 111 time steps\n",
      "392 Episode: Finished after 89 time steps\n",
      "393 Episode: Finished after 107 time steps\n",
      "394 Episode: Finished after 143 time steps\n",
      "395 Episode: Finished after 114 time steps\n",
      "396 Episode: Finished after 159 time steps\n",
      "397 Episode: Finished after 92 time steps\n",
      "401 Episode: Finished after 155 time steps\n",
      "402 Episode: Finished after 116 time steps\n",
      "404 Episode: Finished after 126 time steps\n",
      "406 Episode: Finished after 184 time steps\n",
      "407 Episode: Finished after 95 time steps\n",
      "408 Episode: Finished after 93 time steps\n",
      "409 Episode: Finished after 110 time steps\n",
      "410 Episode: Finished after 200 time steps\n",
      "411 Episode: Finished after 111 time steps\n",
      "412 Episode: Finished after 132 time steps\n",
      "413 Episode: Finished after 104 time steps\n",
      "414 Episode: Finished after 174 time steps\n",
      "415 Episode: Finished after 114 time steps\n",
      "416 Episode: Finished after 96 time steps\n",
      "417 Episode: Finished after 164 time steps\n",
      "419 Episode: Finished after 143 time steps\n",
      "420 Episode: Finished after 100 time steps\n",
      "421 Episode: Finished after 131 time steps\n",
      "422 Episode: Finished after 121 time steps\n",
      "423 Episode: Finished after 111 time steps\n",
      "424 Episode: Finished after 173 time steps\n",
      "425 Episode: Finished after 186 time steps\n",
      "426 Episode: Finished after 104 time steps\n",
      "427 Episode: Finished after 184 time steps\n",
      "428 Episode: Finished after 119 time steps\n",
      "429 Episode: Finished after 183 time steps\n",
      "431 Episode: Finished after 152 time steps\n",
      "432 Episode: Finished after 94 time steps\n",
      "433 Episode: Finished after 109 time steps\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "436 Episode: Finished after 135 time steps\n",
      "437 Episode: Finished after 90 time steps\n",
      "438 Episode: Finished after 182 time steps\n",
      "439 Episode: Finished after 125 time steps\n",
      "440 Episode: Finished after 83 time steps\n",
      "441 Episode: Finished after 99 time steps\n",
      "442 Episode: Finished after 100 time steps\n",
      "443 Episode: Finished after 194 time steps\n",
      "445 Episode: Finished after 140 time steps\n",
      "447 Episode: Finished after 106 time steps\n",
      "448 Episode: Finished after 133 time steps\n",
      "449 Episode: Finished after 142 time steps\n",
      "451 Episode: Finished after 153 time steps\n",
      "452 Episode: Finished after 108 time steps\n",
      "453 Episode: Finished after 108 time steps\n",
      "455 Episode: Finished after 127 time steps\n",
      "456 Episode: Finished after 183 time steps\n",
      "457 Episode: Finished after 121 time steps\n",
      "459 Episode: Finished after 168 time steps\n",
      "460 Episode: Finished after 102 time steps\n",
      "461 Episode: Finished after 110 time steps\n",
      "463 Episode: Finished after 153 time steps\n",
      "466 Episode: Finished after 185 time steps\n",
      "467 Episode: Finished after 159 time steps\n",
      "468 Episode: Finished after 164 time steps\n",
      "470 Episode: Finished after 126 time steps\n",
      "471 Episode: Finished after 161 time steps\n",
      "472 Episode: Finished after 94 time steps\n",
      "475 Episode: Finished after 170 time steps\n",
      "476 Episode: Finished after 78 time steps\n",
      "477 Episode: Finished after 132 time steps\n",
      "478 Episode: Finished after 139 time steps\n",
      "479 Episode: Finished after 131 time steps\n",
      "480 Episode: Finished after 88 time steps\n",
      "481 Episode: Finished after 142 time steps\n",
      "482 Episode: Finished after 107 time steps\n",
      "483 Episode: Finished after 173 time steps\n",
      "484 Episode: Finished after 119 time steps\n",
      "485 Episode: Finished after 171 time steps\n",
      "486 Episode: Finished after 75 time steps\n",
      "487 Episode: Finished after 130 time steps\n",
      "488 Episode: Finished after 75 time steps\n",
      "489 Episode: Finished after 119 time steps\n",
      "491 Episode: Finished after 126 time steps\n",
      "492 Episode: Finished after 81 time steps\n",
      "493 Episode: Finished after 137 time steps\n",
      "494 Episode: Finished after 114 time steps\n",
      "495 Episode: Finished after 162 time steps\n",
      "496 Episode: Finished after 50 time steps\n",
      "497 Episode: Finished after 115 time steps\n",
      "498 Episode: Finished after 106 time steps\n",
      "499 Episode: Finished after 103 time steps\n",
      "500 Episode: Finished after 129 time steps\n",
      "501 Episode: Finished after 89 time steps\n",
      "502 Episode: Finished after 161 time steps\n",
      "503 Episode: Finished after 117 time steps\n",
      "504 Episode: Finished after 100 time steps\n",
      "505 Episode: Finished after 70 time steps\n",
      "506 Episode: Finished after 105 time steps\n",
      "507 Episode: Finished after 96 time steps\n",
      "508 Episode: Finished after 166 time steps\n",
      "509 Episode: Finished after 191 time steps\n",
      "510 Episode: Finished after 169 time steps\n",
      "511 Episode: Finished after 121 time steps\n",
      "512 Episode: Finished after 147 time steps\n",
      "513 Episode: Finished after 101 time steps\n",
      "514 Episode: Finished after 159 time steps\n",
      "515 Episode: Finished after 139 time steps\n",
      "516 Episode: Finished after 186 time steps\n",
      "517 Episode: Finished after 173 time steps\n",
      "518 Episode: Finished after 125 time steps\n",
      "519 Episode: Finished after 113 time steps\n",
      "521 Episode: Finished after 127 time steps\n",
      "522 Episode: Finished after 119 time steps\n",
      "523 Episode: Finished after 119 time steps\n",
      "524 Episode: Finished after 133 time steps\n",
      "525 Episode: Finished after 125 time steps\n",
      "526 Episode: Finished after 122 time steps\n",
      "527 Episode: Finished after 99 time steps\n",
      "528 Episode: Finished after 129 time steps\n",
      "530 Episode: Finished after 167 time steps\n",
      "531 Episode: Finished after 109 time steps\n",
      "532 Episode: Finished after 113 time steps\n",
      "533 Episode: Finished after 103 time steps\n",
      "534 Episode: Finished after 160 time steps\n",
      "535 Episode: Finished after 181 time steps\n",
      "537 Episode: Finished after 164 time steps\n",
      "538 Episode: Finished after 119 time steps\n",
      "539 Episode: Finished after 153 time steps\n",
      "540 Episode: Finished after 136 time steps\n",
      "541 Episode: Finished after 184 time steps\n",
      "542 Episode: Finished after 83 time steps\n",
      "543 Episode: Finished after 165 time steps\n",
      "544 Episode: Finished after 161 time steps\n",
      "545 Episode: Finished after 162 time steps\n",
      "546 Episode: Finished after 180 time steps\n",
      "547 Episode: Finished after 171 time steps\n",
      "548 Episode: Finished after 162 time steps\n",
      "549 Episode: Finished after 112 time steps\n",
      "550 Episode: Finished after 182 time steps\n",
      "551 Episode: Finished after 130 time steps\n",
      "552 Episode: Finished after 120 time steps\n",
      "553 Episode: Finished after 89 time steps\n",
      "554 Episode: Finished after 164 time steps\n",
      "555 Episode: Finished after 103 time steps\n",
      "556 Episode: Finished after 171 time steps\n",
      "557 Episode: Finished after 141 time steps\n",
      "558 Episode: Finished after 107 time steps\n",
      "560 Episode: Finished after 135 time steps\n",
      "561 Episode: Finished after 79 time steps\n",
      "562 Episode: Finished after 85 time steps\n",
      "563 Episode: Finished after 69 time steps\n",
      "564 Episode: Finished after 162 time steps\n",
      "565 Episode: Finished after 74 time steps\n",
      "566 Episode: Finished after 79 time steps\n",
      "567 Episode: Finished after 43 time steps\n",
      "568 Episode: Finished after 20 time steps\n",
      "569 Episode: Finished after 31 time steps\n",
      "570 Episode: Finished after 14 time steps\n",
      "571 Episode: Finished after 26 time steps\n",
      "572 Episode: Finished after 117 time steps\n",
      "573 Episode: Finished after 20 time steps\n",
      "574 Episode: Finished after 33 time steps\n",
      "575 Episode: Finished after 25 time steps\n",
      "576 Episode: Finished after 24 time steps\n",
      "577 Episode: Finished after 23 time steps\n",
      "578 Episode: Finished after 27 time steps\n",
      "579 Episode: Finished after 22 time steps\n",
      "580 Episode: Finished after 45 time steps\n",
      "581 Episode: Finished after 22 time steps\n",
      "582 Episode: Finished after 115 time steps\n",
      "583 Episode: Finished after 49 time steps\n",
      "584 Episode: Finished after 42 time steps\n",
      "585 Episode: Finished after 163 time steps\n",
      "586 Episode: Finished after 10 time steps\n",
      "587 Episode: Finished after 94 time steps\n",
      "588 Episode: Finished after 97 time steps\n",
      "590 Episode: Finished after 190 time steps\n",
      "591 Episode: Finished after 145 time steps\n",
      "592 Episode: Finished after 152 time steps\n",
      "593 Episode: Finished after 173 time steps\n",
      "594 Episode: Finished after 178 time steps\n",
      "595 Episode: Finished after 71 time steps\n",
      "596 Episode: Finished after 190 time steps\n",
      "597 Episode: Finished after 73 time steps\n",
      "598 Episode: Finished after 112 time steps\n",
      "599 Episode: Finished after 167 time steps\n",
      "600 Episode: Finished after 173 time steps\n",
      "601 Episode: Finished after 114 time steps\n",
      "602 Episode: Finished after 129 time steps\n",
      "603 Episode: Finished after 157 time steps\n",
      "604 Episode: Finished after 114 time steps\n",
      "605 Episode: Finished after 129 time steps\n",
      "606 Episode: Finished after 110 time steps\n",
      "607 Episode: Finished after 142 time steps\n",
      "608 Episode: Finished after 119 time steps\n",
      "609 Episode: Finished after 140 time steps\n",
      "610 Episode: Finished after 118 time steps\n",
      "611 Episode: Finished after 130 time steps\n",
      "612 Episode: Finished after 97 time steps\n",
      "613 Episode: Finished after 95 time steps\n",
      "614 Episode: Finished after 127 time steps\n",
      "615 Episode: Finished after 84 time steps\n",
      "616 Episode: Finished after 112 time steps\n",
      "617 Episode: Finished after 135 time steps\n",
      "618 Episode: Finished after 169 time steps\n",
      "619 Episode: Finished after 146 time steps\n",
      "621 Episode: Finished after 150 time steps\n",
      "622 Episode: Finished after 138 time steps\n",
      "623 Episode: Finished after 130 time steps\n",
      "624 Episode: Finished after 104 time steps\n",
      "625 Episode: Finished after 134 time steps\n",
      "626 Episode: Finished after 129 time steps\n",
      "627 Episode: Finished after 161 time steps\n",
      "628 Episode: Finished after 111 time steps\n",
      "629 Episode: Finished after 110 time steps\n",
      "631 Episode: Finished after 128 time steps\n",
      "632 Episode: Finished after 184 time steps\n",
      "633 Episode: Finished after 101 time steps\n",
      "634 Episode: Finished after 115 time steps\n",
      "635 Episode: Finished after 106 time steps\n",
      "636 Episode: Finished after 100 time steps\n",
      "637 Episode: Finished after 111 time steps\n",
      "638 Episode: Finished after 97 time steps\n",
      "639 Episode: Finished after 110 time steps\n",
      "640 Episode: Finished after 85 time steps\n",
      "641 Episode: Finished after 95 time steps\n",
      "642 Episode: Finished after 136 time steps\n",
      "643 Episode: Finished after 135 time steps\n",
      "644 Episode: Finished after 140 time steps\n",
      "645 Episode: Finished after 186 time steps\n",
      "646 Episode: Finished after 126 time steps\n",
      "647 Episode: Finished after 170 time steps\n",
      "648 Episode: Finished after 121 time steps\n",
      "649 Episode: Finished after 126 time steps\n",
      "650 Episode: Finished after 80 time steps\n",
      "651 Episode: Finished after 166 time steps\n",
      "652 Episode: Finished after 168 time steps\n",
      "653 Episode: Finished after 156 time steps\n",
      "654 Episode: Finished after 139 time steps\n",
      "655 Episode: Finished after 100 time steps\n",
      "656 Episode: Finished after 146 time steps\n",
      "657 Episode: Finished after 85 time steps\n",
      "658 Episode: Finished after 177 time steps\n",
      "659 Episode: Finished after 191 time steps\n",
      "660 Episode: Finished after 147 time steps\n",
      "661 Episode: Finished after 105 time steps\n",
      "662 Episode: Finished after 123 time steps\n",
      "663 Episode: Finished after 137 time steps\n",
      "664 Episode: Finished after 129 time steps\n",
      "665 Episode: Finished after 85 time steps\n",
      "666 Episode: Finished after 158 time steps\n",
      "667 Episode: Finished after 198 time steps\n",
      "668 Episode: Finished after 140 time steps\n",
      "669 Episode: Finished after 141 time steps\n",
      "670 Episode: Finished after 87 time steps\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "671 Episode: Finished after 154 time steps\n",
      "672 Episode: Finished after 115 time steps\n",
      "673 Episode: Finished after 186 time steps\n",
      "674 Episode: Finished after 111 time steps\n",
      "675 Episode: Finished after 194 time steps\n",
      "676 Episode: Finished after 187 time steps\n",
      "677 Episode: Finished after 120 time steps\n",
      "678 Episode: Finished after 138 time steps\n",
      "679 Episode: Finished after 158 time steps\n",
      "681 Episode: Finished after 130 time steps\n",
      "682 Episode: Finished after 98 time steps\n",
      "683 Episode: Finished after 133 time steps\n",
      "684 Episode: Finished after 104 time steps\n",
      "685 Episode: Finished after 107 time steps\n",
      "686 Episode: Finished after 141 time steps\n",
      "687 Episode: Finished after 122 time steps\n",
      "688 Episode: Finished after 163 time steps\n",
      "689 Episode: Finished after 98 time steps\n",
      "690 Episode: Finished after 196 time steps\n",
      "691 Episode: Finished after 151 time steps\n",
      "692 Episode: Finished after 151 time steps\n",
      "693 Episode: Finished after 137 time steps\n",
      "694 Episode: Finished after 97 time steps\n",
      "695 Episode: Finished after 182 time steps\n",
      "696 Episode: Finished after 171 time steps\n",
      "698 Episode: Finished after 116 time steps\n",
      "699 Episode: Finished after 106 time steps\n",
      "700 Episode: Finished after 140 time steps\n",
      "701 Episode: Finished after 150 time steps\n",
      "702 Episode: Finished after 94 time steps\n",
      "703 Episode: Finished after 136 time steps\n",
      "704 Episode: Finished after 158 time steps\n",
      "705 Episode: Finished after 101 time steps\n",
      "706 Episode: Finished after 127 time steps\n",
      "707 Episode: Finished after 140 time steps\n",
      "708 Episode: Finished after 94 time steps\n",
      "709 Episode: Finished after 141 time steps\n",
      "710 Episode: Finished after 176 time steps\n",
      "711 Episode: Finished after 135 time steps\n",
      "712 Episode: Finished after 148 time steps\n",
      "713 Episode: Finished after 101 time steps\n",
      "714 Episode: Finished after 115 time steps\n",
      "715 Episode: Finished after 149 time steps\n",
      "716 Episode: Finished after 167 time steps\n",
      "717 Episode: Finished after 167 time steps\n",
      "718 Episode: Finished after 183 time steps\n",
      "719 Episode: Finished after 120 time steps\n",
      "720 Episode: Finished after 146 time steps\n",
      "721 Episode: Finished after 108 time steps\n",
      "722 Episode: Finished after 132 time steps\n",
      "723 Episode: Finished after 156 time steps\n",
      "724 Episode: Finished after 144 time steps\n",
      "725 Episode: Finished after 108 time steps\n",
      "726 Episode: Finished after 163 time steps\n",
      "727 Episode: Finished after 101 time steps\n",
      "728 Episode: Finished after 122 time steps\n",
      "729 Episode: Finished after 156 time steps\n",
      "730 Episode: Finished after 141 time steps\n",
      "731 Episode: Finished after 159 time steps\n",
      "732 Episode: Finished after 153 time steps\n",
      "733 Episode: Finished after 124 time steps\n",
      "735 Episode: Finished after 160 time steps\n",
      "736 Episode: Finished after 158 time steps\n",
      "737 Episode: Finished after 145 time steps\n",
      "738 Episode: Finished after 155 time steps\n",
      "10回连续成功\n",
      "739 Episode: Finished after 166 time steps\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 600x400 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAATwAAAEvCAYAAADYR30zAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAAsTAAALEwEAmpwYAAA1GUlEQVR4nO19e9AlRZXn73Q3+OAhOPQ6jtA0rrixuGsodggbo64R6gqECzrjGiA648rIzAQ4D93GVgkWcWJ21EBmVNRtXXxLCyrQrI2tizwC8EHzlAZamxahERoGWlDoB93f2T/yVn9588usm1mVmZX53fOL+KJO3Vs383dOZmX9Tp269yNmhkAgEEwDFgxNQCAQCHJBFjyBQDA1kAVPIBBMDWTBEwgEUwNZ8AQCwdRAFjyBQDA1WDRUxwcddBAvXbp0qO4FAsE8xU033fSvzLzY9t5gC97SpUuxbt26oboXCATzFET0a9d7ktIKBIKpgSx4AoFgaiALnkAgmBrIgicQCKYGsuAJBIKpgSx4AoFgaiALnkAgmBpMXPCI6AIiepiI7nC8T0T0KSLaSES3E9GR8WkKBAJBf/govC8DOKbl/WMBHD76OxXA5/rTEggEgviYuOAx87UAHms55AQAX2WFnwA4gIieH4sgAOCuu4C3vx045xyAGfiHfwDWrp19/557gOXLgYcfBn7zG2Xfdx/w2GPK3rABePJJ4AMfAG69Fdi1C1ixAjj5ZPX3jncAP/zh3H4//3ng619X9je+ofYB4NJLgXPPVfYPfzjL64YbgA9/WLV/662qvyefVP0vX6743Hefsn/zG8V3+XLF/4kngDPOAO64A9ixA/jgB4Gf/QyYmQHOPFPxfP/7gW3bZvl9+tPARRcp+0tfAi64QNkXXwx86lPKXrMG+Md/VPyuuQY46yzV5o03qj62bwfWr1d9P/44sGmT4rRlC/Dgg8r+9a+BrVuVfffdwFNPqfjdcovy9cwzgeuvV3189KPAD36g+v7kJ4FLLlH2ypXA176m7G9+E/icdl38/e9VrG67DXj6aRXDH/9YtfeRjwBXXqmO+8QngMsuU/bnPqfaAVS7K1cq+5JLVL+A4vHRj6p2rr9e8dy1S/FesUL5cffdyq+tW5Wfy5crv7dsUfamTSouZ5yh4rR9u4rbjTfO8r/pJtXetm3AnXeqY3/7W+BXv1JtPPSQ+lu+HLj3XtXXGWeoeb1tm/rszTcDu3crjtddN3een3ce8J3vKPsLXwC++lVlX3gh8NnPKvvyy4GPf1zZP/oRcPbZqh1Abc85Z3aen3uumsex5/kpp8yeV3/1V/7zvMHNNwPvetdsGyefrHyJBWae+AdgKYA7HO/9XwCv0vavBLDMceypANYBWLdkyRL2xtVXMwPMr34184YNyn7Zy2bfX75cvfaZzzD/0z8p+yMfYf7CF5T9N3/D/N3vKvvkk5mvvVbZ+t+yZeN9bt/OvGAB8/77q/3991f727YxH3aY+syDD6rPAczr1zO/8Y3KvvZa5re/XdmXXML83vcq+4tfZD77bGV/7GPMn/60ss84g/mb31T2Kacwr12r7De/mXndunGel1+u+Dz+uNp/3vOYZ2aY99pL/c3MMP/hH6r3tm5lfslLlL1pE/NrXqPsG29kfstblP397zP/xV8o+xvfYP7AB5T9qU8xf+ITyj7rLOYLLlD2aacxX3aZsk88kfm665T9hjcw33WXso88kvnhh5V96KHMO3YwL1zIvO++ivsBB6hYPvWU2v/2t9Wx73wn81VXKfu445hvv13ZRx3F/MADyn7Ri9TnFixQ7TCrdhcuVP0ceqg6bssWxQNQvN7wBmVfd53iDSg/TjtN2RdcoPwElN//8i/KXrGC+etfV/Z73sN8xRXK/pM/mZ0rb32rem3NGua//Etlf/WrzB/6kLLPO4/53HOVfeaZzF/+srL/+q/VeALMb3sb8w03KPt1rxuf5488ouxDDmHeuVP5+uxnq76f+1xmIubf/5758MPVcZs3Mx99tLJvu00dt3797Dx/6CFlH3ZYmnmu//nO8wZve9vcNlau9F8rmBnAOnasZVm/S8vMKwGsBIBly5b5/zONBQuaBtQVFpjd6vb27WH2S16iriAf+tB4e4BSGjMz45+bmVFXtea1HTu69719+6xfPsebvu7YMbvPrPgC45x37uzHT++jTzu7din1Ysby6aeBZz0rvD3b2OzeHXdsZmYmH2OOSd/2fMZh9+65sWzGv41nSCz7zvN3v1tlM5de6j/PzVj+/d8Dr3iFso86CrEQo0r7AIBDtP2DR6/FA5HazsyMS/QG+msh9h/9EfCmN81tz2yzTx+x7DZeZiyG5tpmT9r2bS+3L0P3P8Rxk+yjjwZe+tJ+sXzta2dT2he9CLEQY8FbDeDPRtXaowE8zswPRmh3FrrCa66UzVa3Z2bC7AULZtvW2zPb7NNHLLuNlxmLobm22ZO2fdvL7ctQ/TcLQ8wYxfLFPK+6xHJBmifmJqa0RHQhgNcCOIiINgP4nwD2AgBm/jyANQCOA7ARwFMA/nt0lqkUHtFs2z5Kqksfsew2XmYshuYaoiJcvsRWOal8Gar/FDGK5Yt5XnWJZfP5yJi44DHzSRPeZwCnRWNkgyi8dl5mLIbm2uaDbQz7tK2fLLn90vsdIpYhPGMeF3pedYllIoVXxzctXMFrYDsB2uzm+DaFZ56kut28l8J28bb5ajvGNwYhcYrlm81Xly+hvGLy9B2nBraTOHX/oTx924sRS/O88pnnZiwTKbw6FryQlNZnYJrj2xSe3v7u3bN2zAXFZrdNSNNX2zExT67YvpmxbPPFh5fpe+qx8Zl/ufoP5Rk6Nn24meeVzzw3YykKD2FXWB/bJ6UF5k6Erv31sW2+2o4Zip+vD65xi9VeTr9sfuSOpU352nj6tBdrnktK2xNDFi2Auaqka399bJuvtmOG4ufrwySF17e9nH7Z/MgZS32hmMQzZywLLlrUseANrfB27Rp/fagruumr7Zih+Pn6YMbS5UvX9nL6ZfNjyFi28cwZS1F4PWELnu2qMDPjZzdtdFV4OofYtou3yavtqh8aj0lxiuWbLZb6NpSXrb2UY2Paph8pYhYSyzae+rZve5Ps0KKFKDwDtpTWdlXwHZimja738GItKDa7bULqvHz49T25Yvtm46pvQ3m1+Z7DNv1IEbOQWLbx9LmgDlW0sMVSFB4mB0m/wvrY86FoYeM3NNc2H9oWvBjt5fTL5seQsWzjmTOWktL2hBQt7L7a+JXAtc0HKVqki2Ubz5yxlKJFTwyt8EouWpj8SuDa5oMULbrb+vwP8d2HY0h7oedVl1hOtcKTosVcXj4Kzzcek+IUyzeTn+lLKC9be3qbKcfJNf9S9mn6K0WLYNSx4EnRYi6vvidBSJz6+NPG1fQllFeb76nHyTX/UvbZ1V9z69N2H55StOiJoVPaEooCNl9t/EoosJi82/iZ25htp/bR5seQsWzj6WovxTyXlLYnSipaDHWT3OZrSfzaeLfxM7cx207to82PIWPZxjO0vT6xlKJFTwyt8EooCth8LYlfG+82fuY2VOUM6bvNjyFjqaeOvgrP1V6fWIrC64mSihapCxgu3iYvH36+8ZgUpz7+tPEzffHh1dZe7m9dmH7EilmXWLb5bm77tjfJlqJFT5RUtEh9Y7xtsuu8fBeUPidaDH/a+Jm+xDzpU4yNz/xL2WdX381t3/Ym2VK06ImQlDZEuegDYyqpHAtKF4UXsuCVrvDaTsbSFZ5r/qXss4vvbReVLu352AsW9P8B0Kle8FL9AKguvU0l5atQcis8m/8+/EpUeKYvNSk81/wrTeGZ2xwKj6j/D4BOdUo7dNGihMc+bL768BuCq8k75mMpbe1N82Mpbb67OHZtL/S86hLLqVZ4tqvFpCusjz3fH0sp4RGVSZzMbZ/2pvmxlDbfXRy7thd6XnWJ5VQrPD3t1GWwLpXN92MqvBIe+zB5+fAr4RGVSZzMbZ/25uNjKXpW09V3F8eu7YnCSwxbStvsA+OBs90vMG3bwJhKSu+n1qJF33taMfyZxMncTuLl66+pIFKMk82P2P34+itFCy/UseDZihaAXa77DIxNeutB19sE6i1a9F2cu/rQ7PtwMrcpFoBU42TzI3Y/ff01t13aDuUsRYuecCk821UsxNavRE37ZttAGUUBl89t/IYssPhyMrex2s7hu82PoWLpW7Qw7ZBx8uUsKW1PhCi8EFtXeHo7pl3CTXKXz6XwM7n6cjK3sdrO4bvNj6Fi6Vu06NJeaCylaNETKRWevnVdBUu4Se7yuRR+JldfTubWR+X4tJ3Dd5sfQ8Wy7Xu1Jt/Q9kJjKQqvJ2zBa/bNrc+9hub45ipiezQlVPab9yS62i7eLp99+fnGxhanUB9COJlbl+99VUmMsTHHyeZH7H76+t51vvSJZeh3aW2xnGqFl6po0abwQk+2LguKzW6b+Dafffl1Oem6+hDCydymOuljjI05TjY/YvfT1/fYKa0P59Dv0tpiKQoPfiltiHLxTWlF4YnCM21ReG7bfNyri8Kb6gUv5WMp+tbWNjA/FJ5PH6Lw/G1ReG7bfNyri8Kb6pRWihZun3355XhMo0vMzG2f9qRoYffd5CtFi8LhKlqYVy/fq2fTRkyFlzqlNTn2uWKHxilVGuY7fl18TJ3S2uZKn5ilUrexFZ4PZ/kB0J6wPdMDzL1ChKZqMe/h+S4iXVPahQvtPvvy67IApE7DfMevi4+pU1rbXImV0przvKR7eD785QdAe0Jf7bvc9HYpF3PBsy2mZp9DKbxFi+w++/IrUeH5jl8XH82xmXRB6TJONj9KUHUlFC3ku7Q90QSwy01vl3IxU1o98F3USg6FFyNFSaHwmv1QHuY2xwIQa5xsfsRoO6a/MeZLl6KFfJe2J5oATlIIIXbMokXqokBbSlvCTfyuPMxtrLZz+G7zY6hY5ipa+MxzKVpEQBMAPfjm1cv3StoENWbRIlZ66+IdU+GFxilVGtY2fjHvY6UqYJh+hMYsh6KNrfB8YilFiwiwpbTmFSI0VYtZtIiVNk1KaW1XxVJS2r73l1Kd9KkKGKYfJaa0MeZLaCylaBEBviltiHKJWbRIrfBKL1p05WFuU5z0KRSe7SQtUeGlXPBc/GsvWhDRMUS0gYg2EtEKy/tLiOgqIrqFiG4nouOiMy29aJFL4cVIUUpReG3j16U9KVrMtVOmtC7+NRctiGghgPMBHAvgCAAnEdERxmFnAriImV8O4EQAn41NtPiiRYob474p7XwsWnRpT4oWdn9NvqljGVq0sGVWAyq8VwLYyMybmHkngFUATjCOYQD7j+znAPhNPIojTGPRQm83dtFCt4dKadvGr0t7OVNa21wJjVmOlDalwnPxDy1a2HgmUniLPI55AYD7tf3NAI4yjjkbwA+I6L0A9gHw+ijsdExj0UJvN2bRwncBSJ2GtY1fX79Sp7QNX6LuMYsZyyHu4bn4hxYtmvcWLixC4fngJABfZuaDARwH4GtENKdtIjqViNYR0bpHHnkkrIdpLFro7cYsWvguAKlVSdv49fUrtcKz8S1R4aVc8Fz8Q4sWNp4DLngPADhE2z949JqOUwBcBADM/GMAzwRwkNkQM69k5mXMvGzx4sVhTKexaKG3GzOlLUXhtY1fX79yKTzXfpdxT5V26tuYbbt8CS1aNPs6xwGfw7sRwOFEdBgR7Q1VlFhtHHMfgNcBABH9e6gFL1DCTUAOhRcrpU2h8FKltDUqPNeT/6H+xlB4rv0hVV0JCi/kB0DN/USLHeCx4DHzLgCnA1gL4C6oaux6IjqHiI4fHfZ+AO8hotsAXAjgXcy6NxHgo/D0Cedj+xYt+v4TlRBO5knUtNum8IaqWgLuhcjHbhu/ts/16dNcDPr4bqqSWGMd0449X3zmufkDoKGxTLjg+RQtwMxrAKwxXjtLs+8E8MdxqRnwUXghV2a9zdgKr08KNSmljX3F7pPS9u27bfz6tp06vdV5N+iT0qb00eSaOpZdixbmeZkAXgteEbA9ltKWEvlM1FRFiz7preskKLFoEaNvfZvqPlaKWw86b32/T3s1L3hmStulaJFhwavnq2WxihZ6G6mKFikVXuyb0EMqvNi+5FZ45gJdosLLFWPdl75Fi6FT2iIQq2gBzKrEHCltLIVXYtEiRt9dfOlTtBCFJwqvCsQqWuhtpCpaxCwKlF60GOKGumvxy+27qfCGjOUQRQtXLE2FFxpLUXiIW7Ro2iixaOHqexqKFn3by53SmgqvxJQ2V4x1X3yKFianTAqvvgUvRtHCteBNWnS62LFSm5RFC92uIaVNkYZJSps3pbXxzLDgza+UNnRilVi0cLWVqmjRtgCkViW5bqinUt9StJi1dV98ihY2npLSashRtChZ4aVKadsWgFIV3lBFCxf/FG2LwkuC+aXw9KC5bL2NXApvEicXP93OofBicfW1S1B4ffw1FV5o2zkWvJwKr/HFp2hh4ykKT4Nv0UIfYJutt5HrsZRJnNpOnJwKLxZXXzuX+pjUP9DN30kKz6e9+aTwGr/M79L6xlIUngbfHwDto/DM+zENUnzfsI2fra1Uj6WEPqYBuNPL2h5LCVVkNv59FF5f/qU9lqIrtEnfpbXxFIWnoc8PgOrH6G3kUHgm375Fi9QKz6aWffh1sYdWeH3Hpk3h9Rnr2H6ZXFP32aVokUnh1bPg9SlamJ/LWbRoW1BC7uWkeiyl7SRNfa+pqy+xihZ9x8Zc8EzF0nWsY9q5F7zmXJKiRU/0KVqYn3OltOY9nbbPdrG7pIymwhu6aBGzv6GLFn19j5HSpvYrd4ybc0mKFj3Rp2hhfs68GuVKaedD0SJmfyWltEMVLearwpOiRU/0KVqYn3MpvBRFiy5FgdKLFkPfUNdPlCF9l6LFXNuWNYXGUhQe3EULc5EKuVdSStGiJIVnU8upbrSXpPBcYzPpRruOvu3NR4XnO88zKbx6FjxXSmsuUjUWLXw+n6No4YqtFC3a+dt4SdFCbX39lZTWgKtoYS5SITeHSyla+Hw+V9EiBldfu4aiRbPv4t+mWLoW02LaJRUtJvGUlFaDj8KrtWjh8/kcKW0srr52SSltF38npbR92q41xm1Fi0k8ReFpsC14IQqv5KKFz+dzFC1icfW1ayhaTOI/6baJ2Z6Z4k1T0WIST1F4GlxFC/NKWmPRwufzovDS2q57wb6fmXTcUGn70AovJJZStNDg+gHQmooWZsWqlqJFyj70re/nUhQtzMXe90a7Dhev3IWKEhY8KVr0RGjRotlvYAv0EEULF1dfhZfrJnSOBa+kokUX37vcn8rtixQtxlCfwmubSKGpV26F1+VkMRe8IVLaVH2UlNJ2Xch0DBnLUmJsU3gFpbTzW+H5Xo1yKbw+V31RePlsUXii8AZHDoWXumghCk8UXg7+JSi8Qh9LqW/Bm1S0CCn5+6a0qR/78PlMW9GiBH5d+9C3qfpJ5Xtb0SJ3LEuJsZnShsRSUloNvimtjpJT2tDKnaS0+WxJafuntKFVWklpDfiktPp75r6v/Nbb9m2nix3aR+6UNvTi0acPSWnT2UMXLXz7FoVnwEfhhS54Qyq80M8MofC6cvW1S1V4QHyFN5SPQyk8wC5SBlZ49Sx4ORRezqJF6GdyK7w+XH3tUhVeCP8uDyjn9GUohafbobGUogXsQTAnXNc2J6W0JaCtaFEravelBt65Y6yfpyFKTVJaA7bgmSlF1zYnpbQloC2lrRW1+9J3/uVA7hjbUlofSNHCwLQrvLaUtlbU7ksNvEXhjUEUnr4VhZcXtfsiCm8uROFFQg6F5ypalABReOWhBt5DKryQBU8UngFbEGIrPL2t0q7covDKgyi8udDVWYhSE4VnwBYEUXh1o3ZfauAtCm8M9Sx40160kMdSykMNvKVoMQavlonoGCLaQEQbiWiF45i3EdGdRLSeiL4ZlyakaCEpbXmQlHYuai9aENFCAOcDeAOAzQBuJKLVzHyndszhAD4I4I+ZeSsR/ZvoTKdd4UlKWx5q4C0Kbww+Lb8SwEZm3sTMOwGsAnCCccx7AJzPzFsBgJkfjksTeYoWovDyonZfROHNReEKz4fRCwDcr+1vHr2m48UAXkxE1xPRT4jomFgE90CKFmpbuyrSUbsvfedfDkjRYgyxihaLABwO4LUADgZwLRH9R2b+rX4QEZ0K4FQAWLJkSVgP057SStGiPNTAW1LaMfi0/ACAQ7T9g0ev6dgMYDUzP83MvwLwC6gFcAzMvJKZlzHzssWLF4cxlaKF2taeBuqo3RdJaediHqS0NwI4nIgOI6K9AZwIYLVxzKVQ6g5EdBBUirspHk2IwpOUtjxISjsXtSs8Zt4F4HQAawHcBeAiZl5PROcQ0fGjw9YCeJSI7gRwFYDlzPxoXKZStABQvyrSUbsvovDmonCF53UPj5nXAFhjvHaWZjOA943+0kCKFmpbuyrSUbsvNfCWosUY5JsW+rbklFaKFuWhBt6S0o6hnh8PkKKF2taeBuqoISVsQw38JaUdgyg8fVuywpuvKW3pC0YbahgDUXhjEIWnb0Xh5UUNCqkNNfAXhTcGUXj6VooWeVHDYx1tqIG7FC3GIAuevi05pW2KFg3H0vh1gSx46SEp7RgkpdW3Jae0+iSoIZXyQe1+1MBfUtoxiMLTtyUrvAUL1ERgrl8ZNajdjxq4i8Ibgyg8fVuywiMa/98bpfHrgtr9qIG/KLwx1LPgicIbL66Uxq8LavejBv6i8MYgKa2+LblKKwteeaiBu1Rpx1CPwpOUVlLa0lADf0lpxyAKT99KSpsXtftRA3dJaccgCk/fisLLi9r9qIG/KLwxiMLTt6Lw8qJ2P2rgLgpvDPUovGn/AVBReOWhBv6i8MZQj8KL/QOgtoGRKm1e1O5HDdylSjuGeha82CmtbWAkpc2L2v2ogbuktGOoJ6WNXbTQ25OUdhjU7kcN/CWlHYMoPN0WhZcXtftRA3dReGOoR+HFLlqIwhsetftRA39ReGOoR+HFLlrYFJ4ULfKidj9q4C5FizHUs+BNe0pLJAteaaiBu6S0Y6gnpZ3mooX5vGANqZQPavejBv6S0o5BFJ5ul6rwbL/qUhK/rqjdjxq45/6XAKLwIkEUnii80lAL/5w8ReFFgig8UXiloRbuOeNcuMKTBU+3S63SyoJXJmrhnpNn4VVaSWl1W1LavKjdj1r4796dry9JaSNBUlpReKWhFu45F7zCU1pReLotCi8vavejFv6i8PZAFJ5ui8LLi9r9qIX7rl35+ipc4cmCp9tStMiL2v2ohftQKa0ULXpAUlpJaUtDLfwlpd0DUXi6LSltXtTuRy3cpWixB6LwdFsUXl7U7kct/EXh7YEoPN0WhZcXtftRC3cpWuyBLHi6LUWLvKjdj1q4S9FiDySl1W1JafOidj9q4S8p7R6IwtNtSWnzonY/auEuRYs9EIWn26Lw8qJ2P2rhLwpvD7wYEdExRLSBiDYS0YqW4/6UiJiIlsWjOIIoPFF4paEW/lK02IOJLRPRQgDnAzgWwBEATiKiIyzH7QfgbwH8NDZJAPEXvEkKr6SJbCq8Wk60Sajdj1r416Dw9FgOrPBeCWAjM29i5p0AVgE4wXLcRwF8DMD2iPxmETulnVSlLSlVMRVeLanUJNTuRy38a7iHp8dy4Ht4LwBwv7a/efTaHhDRkQAOYebvReQ2DklpJaUtDbXwl8dS9qB3y0S0AMAnAbzf49hTiWgdEa175JFHQjua+9q0Fi1qOMl8UItCcqEW/jWktAUVLR4AcIi2f/DotQb7AfgPAK4monsBHA1gta1wwcwrmXkZMy9bvHhxIFNReNbUu2bUopBcqIV/DSltQQrvRgCHE9FhRLQ3gBMBrG7eZObHmfkgZl7KzEsB/ATA8cy8Li5TC9VpVXg5J3BK1KKQXKiFvyi8PZjIiJl3ATgdwFoAdwG4iJnXE9E5RHR8MmYmbEGYVoWX8zGDlKhFIblQC395LGUPvL5pwcxrAKwxXjvLcexr+9OyQL5LO7udTwqvpDiHohbuUrTYA/mmhW5LSpsftSwaNkhKOxeFp7TyXVrdbgJe2iSerwoPqNuXWhZrKVrsgSg83W4CXtqCN58VXs2+iMKbC1F4kZBT4ZV25Z6vRQugbl9KmycuSNFiD2TB0+2mrdImsqS0ZaK0eeKCFC32QFJa3ZaUNj9q9kVS2rmQlDYSJKUVhVcaSpsnLkjRYg9E4em2KLz8qNkXUXhzUbjCq2fB04O3aCRM9avCokVz32+zfRTeIkMAh/YRy3YVLfRjiOwxKtHW922+9Gkvp91n/qWIpcsOiXFfPi6FFxJLUXgYD8LChWqrB6l5zdf2KVrox3fpI5btSmn1Y4jGJ9hQXH1sfd/mS5/2ctp95l+KWLrskBj35eMqWoTEUhY82E9mXQaHDoxPSlvCSaXzM1Nac6KFTLAhbX2/5gWvz/yLtaj4fCbngmc7r3w+K0ULAzkUnpnSlnBS6fxE4U1uL6etFy1kwZvLTRReD4jCq1vhuU7SWAveEL4PqfBC/B1K4YVwFIVnoASFl/qk0m/m2riaRQtzopW+4BHNXSBsvnRtO5cv+vzL3Sfg769ZtMhx8XAVLSbNc1F4BoYoWuhp4pALik9KO9RJ72u74hdD4Q01NkMVLUL9nRTjmPNcUtpIsJW4dRkcWj63pbTmr6XoqYOZRqR4xMB1FXSltObjACU/lqLz008qmy++7TXxGMr3PvMvViyByeppUoxjznNX0WLSPJeU1kAJCm8oBTUfihauWHZVeE0bzMP5PlRKa/o7SUmFKrw+sRSFFwlDFC3arny5J7i+rbVoYYtl1wWvhLEpoWjh4/ukGMeMpRQtImGIooWZNqVWEdNQtDDtrkWL3GNTksLz9d23aBEzloUXLaZ3wWtTeHpKa7vv1KW/FArPXLRLT2nb7uHFai+nX0OmtCG++6S0sWLZVeHp57J8lxbxixZtCq+0ooXrHp6LX4nfq52U0sZqL6dfJRQt2nw3F7wcsXQpvJCihSg8SNFC3zYT2MWvxAJGqqKFaef0q4SihY/vUrSYpZSs5diQooU9pbXxK7GAIUWLOBe9xpaiRSeIwtPtWooWusKzpbElFjBcseyz4EnRwq9o4bPgTUnRoh6FZzuBUyu8UhaRNoVnm6ilFDDMyZ+raJFrnHIqvD4XtxqKFqLwDNhO4CEVXs7Fz1R4zWMGpSu8JmbM7ljGfiwl52KfU+H18bfPYymh88hH4bliKQpPw1BFixIWFFdKW8JJ32b7xC+2wss5Njm/Sxtb4ZmFilixlKJFJMR+LKVP0cK8sTvUd2lz84v1+IStaBEanxJ8z/lYiq+/bQteaHtdYulSh4V8l7aeBa+kokUqBTXfihY+8QtReLpfJajbnArPx19z3NuKFj7tdYmlT0orRQsPDPFYSikLSq1Fi9gprevkHmpsSitauHx3pbRd25vEs0HIZ0XhGZgGhTeJa7OtrWjRZocULUTh+dv6520xHlLhTYplQoVXT5U2x4InRYu49nxXeDmrtLUoPNt55fNZWfAM5Cha+H6XNtWNcX0idCla6Auea9LWXLTwaS/V2NRQtDB9Nxe83EUL2zmr89Jfl+fwDAyl8PTFxmZ36TuWwvPhl5urqSImcQotWpTkb26F19V3n8dSYsVSFF4kuG6Gpvh5qFCFl2Oy69sQhZebqzn5fRVerPZy+pu6aGEuHn0VXo5YFl60qGfBcwWvz3cxTXvoooXvYykhRYshCxg+8au9aJGjH8DPX9P3Zj6VVrSQx1I8YAayi0KYtODNx6JFzgVA5wiUUbRIOU6pq7ShFzQpWkxEPQueKZXNEyZG0QKY+0OEoVK/tG9amFxLu7mesmiR2vfURYu+/qZMaSstWtSz4JnKoctNb9eVqGkTUEEPKVrkuEnuUnil8DOVQwinlEWL1L7nUHgx/O06X7rEUhReJExSeF0mk639mZkwhdd2FYw58fVtH4WXI6XtovB8T6AYiieWnaNo0cdfM8Z92vONZeFFC68Fj4iOIaINRLSRiFZY3n8fEd1JRLcT0ZVEdGh8psZAdrnp3abwmn1d4en9+NhdeLjShDaFV3LRIjRmk8bP5UvusRlC4YX6qNtEs201Me7Tnm8szUzMdkzJRQsiWgjgfADHAjgCwElEdIRx2C0AljHzSwF8G8DHYxOdE8i+Cs+14Jn/PamEBcWV0pZw0pt2aMy6/hpvCWNTctHCdtugb3s+sbQpTB9/S1nwALwSwEZm3sTMOwGsAnCCfgAzX8XMT412fwLg4Lg0MVcqd7kH5JPSmkWLEhYUV0pbwklv2qEx6/prvCWMTY6Uto8i63uB7BJL/ZiQ2BeU0r4AwP3a/ubRay6cAuCKPqSsEIUnCk8UXpgtCm8Ooj54TETvALAMwH92vH8qgFMBYMmSJaGNz9q2q1efx1L0/b5Fi9K+S6vb5qQt4VGKrv8zNffY1PZYikvhpY6leZ7ajrHN84IU3gMADtH2Dx69NgYiej2ADwM4npl32Bpi5pXMvIyZly1evDiQqXHlaIIiRYtudl+usdIwKVqkT2mlaDFLz+OYGwEcTkSHEdHeAE4EsFo/gIheDuB/Qy12D8enibn3BnxTIklp899vDImZpLSS0gLlLHjMvAvA6QDWArgLwEXMvJ6IziGi40eHfQLAvgAuJqJbiWi1o7nuMKWyOZhdJpOt/flctChR4UnRon3BiKHwpGixB1738Jh5DYA1xmtnafbrI/OyY8ECdRUQhTe7X4LCM9OYUhVe7HFK8eMBDWdznovCi4J0LadA29UrVtEi9Lu0ug2471WU8F1ak2sJN9dzFS1S+J6iaJHC39TftJDv0iaCHvy+Ka2PwsutoHyLFqWltH3ilCulTaFuU9zD6+OXadsWvFhtu2Lpo/AKL1qUA9vET/ld2lIWlDaFN/RJ3/DqGifXL3nodoyUNsXYpLiHFyvtTJnStsVSn18h8RaFZ4Ft4pf0WEqqBcVUeKU9ltInTrbx8+FfwtjUovBiP5biq/BC4l3jg8fJEVPhuRa8PkWLlAuKvp0GhTeJfwljk7JoEcMeQuGZ6tzXd0lpLbBN/JIeS0m5oOjb+X4PrxaFl+qxlNgKL+c9PP310HjrQiMR6lrw9MluDmaXapitbfNKY+vTx+7CyeSnTzB9G6tKq0+2kqq0fdrLMTZ6ZbGZK9NUpW2LpUvh+cxzUXgGbOlM1yusS+GVUrTQJ4K5jaFAY3LtEyfb+IXyH2JsGtRQtIhxi8Y3lvp55RNv24InCm8E/QpjBiXWPbxSihZm+mbjnGrS5kzDJvleYkpr419CLE3bNsdTp7R6nz7xNueh2UZk1Lng2YI034oW5gRzcU4xaXOqEh/fS1N4ZlulxNKl8FK07YqlGZdJ/touHqLwRvBVCPOhaGFOMBdnUXjDK7y+sXQtnjUqPDMuk3w3Y5dwsQNqW/D0yW4OZolFiz5FAbNdF+eu/Eyufb4G17fvSb7Hts2TrM/Y2PZLKFS4FrwUbfsovJBYJkRdC54tnWkwTUUL2zExr9I5U69JvrvsIdVt7JQ2Rao5VEqr9+kTYzN2ovA06FeYLimtPglsVz8gXtEi5klgbm3H5D7pY8amzfcUKW3fsbGdpCXE0rRtczxFP65FrktKKwpPg69CCCkEmG3HKlrEPglcnEtYkGMoPJdiEoXX3c6h8NoWrC4KTxY8Db4KIaQQYLYdq2gR+yRwcS5lQe6r8EI5i8KbbA+h8Fy2FC06QJ/s5mB2LQSYbccqWpgc51vRImbfMdvL7Xvs9lL5mKsfly1Fiw6wpTMNuhYCzLbNn6lp+smhoMyBN7manGNemUtIaUM4S0o72R4ipfVReG2xE4WnQb+q9E1pbSccEO8HQLucBK4T2sVZUto4/UtKGy+WLrXmM8/NzyRAnQteDIXns+DlXlD0q7KNa6oJbKoBUXhzbVPFiMJzx8Jm+8xz8zMJUNeC16YQ5kPRQr8q27jmmMAhXKdJ4bV9vu2knzaF57J95rn5mQSoa8HTJ7s5mPOhaNHWlotzDH6xuYb2l8qXHP52bdu1AKTyMVc/LjsklglR14LnSsGA8JTRR+GZx3e1u/Izudo4x+AXm2tof6l88e1fP8lC/Z30nm+KnNrHXP34KDzfzydAXQte29UrNGXMrfB8TqpSFJ5vFbkm9eGyzZQqdGwmvddlrGtWeD4XElF4nnBNUkCKFrHsSfxixMM2fqE8U3EJ9b2NV5f2Yto2hZezT1ccXPPc/EwC1LXguYIE+Kci+uDY2k5RtPBdUFzKQ+dvcs550qeKRxeeQ4yN6zMuXl3ai2nnuECai70OVxxc89zWRmTUteC5ZDDQvRBgtp0ipTX51lq0SNVfqrZz+B67vdpjbPYX4rutjchI23ps6FeSrgpv0tUoRdHC5Ftr0SJVf6nazuF77PZqj7HZX4jvtjYio64Fr+3q1bUQYLadQ+HVXLSoWX2k8D12e7XH2OwvxHdbG5GRtvXY0K8KIcFtPqfbrqtRrB8AddkmP5+buS7OLt/62JP4pYhHF55DjI3rMy5eXdqLadvmeOo+dbji4JrntjYio64FT78qmEFqC65tcFwLZoofAG1bUFxKwcbV5Jz7pE8Vjy48cy/2bZ9x8erSXky770Wli61Dj4PPPLe1ERn1LniuAAJ1FS18P+/iHJufOQGnuWgRO6Wd5qKFL0+zjchI23ps6GmDeYV1XVX190zb1nbuooXv512cY/OLwTW0jxy+pPJ30nuuxS+3X7n6NPsL6dvWRmTUteD5XGGBuooWIVfO3FfsrlxLVR8p/A09bgh/c/Zp9tcnRgmQtvXY0K8KZpBcV2n9Pd12XY1S/ACoybftHmMbV5Ozy7dY9iSuseLRhdsQY+P6jA+vHPxdcynEn7622Z+rb9d8E4WnQb8quIIJ9CtapPgB0JAFuY2ryTn1BDb7TBWPLtxScDEXCV/+PrxScW6z+15Uuthmf66+feZbAtS74JlBci14+numbWs7dUprG2Cfz7s4x+bXFttUfeToJ5XvJcWyhBib/XWJUUKkbT02XFfitv0229Z26qJFH642zqXw69NHjn5S+V5SLEuIsdlflxglRF0Lns+V09wPvRqlVnh9uOa+YufqI0c/qXwvKZYlxNjsr0uMEiJt67Hhc+U090OvRqLw8qqSXP2k8r2kWJYQY7O/LjFKiLoWPJ8rp7kfejUShZdXleTqJ5XvJcWyhBib/XWJUUJ4tU5ExxDRBiLaSEQrLO8/g4i+NXr/p0S0NDpTwG8iKULdByfHgqdfxUImUu4JnKuPHP2k8r2kWJYQYx2h89zWRmRMbJ2IFgI4H8CxAI4AcBIRHWEcdgqArcz8IgDnAfhYbKIjMrPbNrnsOtZHfktKmzcNy9VPKt9LimUJMTb76xKjhPBZTl8JYCMzb2LmnQBWATjBOOYEAF8Z2d8G8DqiBMx9r5yuY9uuRs3+V74CXHPN5M/2vQr2+YzL79h2M4TzRX342Pq0DVElPscRDeNXCM8Yc9vsM4SnrY2IWDT5ELwAwP3a/mYAR7mOYeZdRPQ4gD8A8K/6QUR0KoBTAWDJkiXhbA88cHbb2M3+okXAvvsCz3zm7Gu7dwPPeIayN28G9t9/vA1b22vWjL+2e/fcPn3t/fdXA3jggYrXM585/v6OHeqZwQMPBLZuBfbZZ/b9Aw6Yy/U5z1EnTaNAzf6ayeLL74ADZu199gH22kvZCxcC++2n9pv3d+6c5f/rX8+NpY/dLCbm+C1YoPoLbW/HjvFYh3y2ieWBBwLPetbsPGne37VrduyeeAJ49rPHx8Gcf3osn/1sYO+9Z8ekmQdNf9u2qT6bmHSJpT42k47XebqOjTXPTYTM8+b4lGDm1j8AbwXwRW3/nQA+YxxzB4CDtf17ABzU1u4rXvEKDsbmzcwXX8y8ezfzww8zf+YzzOeey3zbber9669n/tnPlH3TTczXXKPs9euZ165V9saNzKtXz217yxbmT39atXfuucwXXMC8bRvz737HfOGFarttG/OqVcyPPcb89NPM3/oW80MPMc/MMH/728z336/aWr1a9cOs+l2/XtnXXKN4MSue11+v7NtuY77ySmVv2MD8ve8p+957mb/7XdV+gyuuUPy+/GXmHTuYH39c8XvySfV34YXMv/2tem/VKuZHHlHxuvhi5gceUG1dcgnzr36l2luzhvnuu5V95ZWzsbzhBuaf/lTZN9/MfPXVyr7zTubvf1/Z99zDfNllyr7/fhWDmRkVy299i3nnTuatWxUnPZZPPMG8fTvzl76kfGnG5pe/ZL78cmXfdx/zd76j2nvoIeaLLlIxf/RR5df27aodfWwuvFCNzc6dqv8tW+aOzWWXKd7Myo8771T21VcrP5mV37axuftuFS9mFb/zzlN/mzbNjk0Tyx/9iPnWW5X94x+rP2bmW25hvuoqZd91l/oMs2rj0kuVbc5zM5ZPPcX8+9+Px3LVKhWbXbtUrB58UPl+0UUqxqtWjY/N00+rWK1aFX+e6/Cd5//8zyqWzdj0AIB17Fh3iBu14AAR/ScAZzPzG0f7HxwtlP9LO2bt6JgfE9EiAA8BWMwtjS9btozXrVvXbZUWCAQCB4joJmZeZnvPJ2G+EcDhRHQYEe0N4EQAq41jVgP485H9VgA/alvsBAKBYAhMvIfH6p7c6QDWAlgI4AJmXk9E50BJx9UA/g+ArxHRRgCPQS2KAoFAUBR8ihZg5jUA1hivnaXZ2wH8t7jUBAKBIC7S1oAFAoGgIMiCJxAIpgay4AkEgqmBLHgCgWBqIAueQCCYGsiCJxAIpgay4AkEgqnBxK+WJeuY6BEAvw782EEwfpCgEJTKCyiXm/AKR6ncSuN1KDMvtr0x2ILXBUS0zvUduSFRKi+gXG7CKxylciuVlw2S0goEgqmBLHgCgWBqUNuCt3JoAg6Uygsol5vwCkep3ErlNQdV3cMTCASCPqhN4QkEAkFnVLHgTfo3kZm5HEJEVxHRnUS0noj+dvT62UT0ABHdOvo7bgBu9xLRz0f9rxu99lwi+iER/XK0TfxPA+Zw+ndaTG4loieI6O+GihcRXUBEDxPRHdpr1hiRwqdG8+52IjoyM69PENHdo74vIaIDRq8vJaJtWuw+n4pXCzfn+BHRB0cx20BEb0zJLRiu334v5Q/qR0fvAfBCAHsDuA3AEQPyeT6AI0f2fgB+AfXvK88G8D8GjtW9MP6XCICPA1gxslcA+NjAY/kQgEOHiheA1wA4EsAdk2IE4DgAVwAgAEcD+GlmXv8FwKKR/TGN11L9uIFiZh2/0blwG4BnADhsdO4uHGrOmX81KDyffxOZDcz8IDPfPLJ/B+AuqP/aVir0f6H5FQBvHo4KXgfgHmYOfeA8Gpj5Wqhf5dbhitEJAL7KCj8BcAARPT8XL2b+ATPvGu3+BMDBKfqeBEfMXDgBwCpm3sHMvwKwEeocLgI1LHi2fxNZxAJDREsBvBzAT0cvnT5KPy7InTqOwAB+QEQ3jf4lJgA8j5kfHNkPAXjeALwanAjgQm1/6Hg1cMWopLn3bii12eAwIrqFiK4holcPxMk2fiXFbA5qWPCKBBHtC+A7AP6OmZ8A8DkA/xbAywA8CODcAWi9ipmPBHAsgNOI6DX6m6xyjkHK8qN/AHU8gItHL5UQrzkYMkYuENGHAewC8I3RSw8CWMLMLwfwPgDfJKL9M9MqcvwmoYYF7wEAh2j7B49eGwxEtBfUYvcNZv4uADDzFmbezcwzAL6AAWQ8Mz8w2j4M4JIRhy1NGjbaPpyb1wjHAriZmbeMOA4eLw2uGA0+94joXQDeBODk0WKMUbr46Mi+Ceo+2Ytz8moZv8Fj1oYaFjyffxOZDUREUP+l7S5m/qT2un5v5y1Q/5w8J699iGi/xoa64X0Hxv+F5p8DuCwnLw0nQUtnh46XAVeMVgP4s1G19mgAj2upb3IQ0TEAzgBwPDM/pb2+mIgWjuwXAjgcwKZcvEb9usZvNYATiegZRHTYiNvPcnJrxdBVE58/qGrZL6CuZB8emMuroFKe2wHcOvo7DsDXAPx89PpqAM/PzOuFUNWx2wCsb+IE4A8AXAnglwD+H4DnDhCzfQA8CuA52muDxAtq0X0QwNNQ95dOccUIqjp7/mje/RzAssy8NkLdD2vm2edHx/7paIxvBXAzgP86QMyc4wfgw6OYbQBwbO751vYn37QQCARTgxpSWoFAIIgCWfAEAsHUQBY8gUAwNZAFTyAQTA1kwRMIBFMDWfAEAsHUQBY8gUAwNZAFTyAQTA3+P1qPcJrWfO3uAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 360x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# main\n",
    "cartpole_env = Environment()\n",
    "cartpole_env.run()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
